#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 第1行注释可以让这个hello.py文件直接在Unix/Linux/Mac上运行，
# 第2行注释表示.py文件本身使用标准UTF-8编码：
# 多线程和多进程最大的不同在于，多进程中，同一个变量，各自有一份拷贝存在于每个进程中，互不影响，而多线程中，所有变量都由所有线程共享，
# 所以，任何一个变量都可以被任何一个线程修改，
# 因此，线程之间共享数据最大的危险在于多个线程同时改一个变量，把内容给改乱了。
# 来看看多个线程同时操作一个变量怎么把内容给改乱了：
import time, threading, os

# 全局变量
balance = 0


# 模拟向银行存钱，先存后取
def change_money(n):
    # 声明要使用全局变量，不建议这样使用
    global balance
    balance = balance + n
    balance = balance - n


def run_thread(n):
    print(f'pid:{os.getpid()},change_money:{n},start...')
    for i in range(3000000):
        change_money(n)
        # print(f'pid:{os.getpid()},change_money:{n},index:{i}')
    print(f'pid:{os.getpid()},change_money:{n},finished...')


t1 = threading.Thread(target=run_thread, args=(5,))
t2 = threading.Thread(target=run_thread, args=(8,))
t3 = threading.Thread(target=run_thread, args=(9,))
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()
print('balance:', balance)
